home *** CD-ROM | disk | FTP | other *** search
/ Linux Cubed Series 3: Developer Tools / Linux Cubed Series 3 - Developer Tools.iso / devel / make / icmake-6.000 / icmake-6 / icmake / comp / etob.c < prev    next >
Encoding:
C/C++ Source or Header  |  1994-02-08  |  960 b   |  43 lines

  1. /*
  2.                                 E T O B . C
  3.  
  4.                  Convert expression to boolean expression
  5.                  Links are not generated by etob(), but they
  6.                  may exist.
  7. */
  8.  
  9. #include "iccomp.h"
  10.  
  11. void etob(e)
  12.     ESTRUC_
  13.         *e;
  14. {
  15.     switch (e->type & (e_int | e_str | e_list | e_bool))
  16.     {
  17.         case e_int:
  18.             if (test_type(e, e_const))
  19.             {
  20.                 e->evalue = e->evalue != 0;
  21.                 set_type(e, e_int | e_const);
  22.                 return;
  23.             }
  24.         break;
  25.  
  26.         case e_str:
  27.             if (test_type(e, e_const))
  28.             {
  29.                 e->evalue = 1;
  30.                 set_type(e, e_int | e_const);
  31.                 return;
  32.             }
  33.         break;
  34.  
  35.         case e_bool:
  36.             return;
  37.     }
  38.     etoc(e);                                /* convert to code */
  39.  
  40.     gencode (e, op_jmp_true);
  41.     gencode (e, op_jmp, j_falselist);
  42.     set_type(e, e_code | e_bool);
  43. }